package sqlTestes.tComplexoSelect;

import junit.framework.Assert;

import org.junit.Test;

import sql.ddl.Tabela;
import sql.ddl.coluna.Coluna;
import sql.dml.selecao.FabricaSelecao;
import sql.dml.selecao.Select;
import sql.dml.selecao.coluna.ColunaSelecao;
import sql.dml.selecao.filtro.FiltroSQlBasico;
import sql.dml.selecao.tabela.Onde;
import sql.dml.selecao.tabela.TabelaSelecao;

public class TesteSelecaoFiltrandoColunas implements Especificacao3 {
	Select select = null;

	@Test
	public void tabelaTerraFiltroAguaMaior3() {
		TabelaSelecao agua = new TabelaSelecao(new Tabela("Agua"), null);
		select = FabricaSelecao.fabricaSelecao(new Onde[] { agua },
				new FiltroSQlBasico("agua", "3", ">"));
		Assert.assertEquals("SELECT * FROM Agua WHERE agua > 3", select
				.codigoSQL());
	}

	@Test
	public void tabelaTerraFiltroAguaMaior3_aguaMenor20_OrdenarColunaFogo() {

		TabelaSelecao agua = new TabelaSelecao(new Tabela("Agua"), null);
		select = FabricaSelecao.fabricaSelecao(new Onde[] { agua }, null,
				new ColunaSelecao(new Coluna("int", "fogo")),
				new FiltroSQlBasico("agua", "3", ">"), new FiltroSQlBasico(
						"agua", "20", "<"));
		Assert
				.assertEquals(
						"SELECT * FROM Agua WHERE agua > 3 AND agua < 20 ORDER BY(fogo)",
						select.codigoSQL());
	}

	@Test
	public void tabelaTerraFiltroAguaMaior3OrdenarColunaFogoOFSET3() {

		TabelaSelecao agua = new TabelaSelecao(new Tabela("Agua"), null);
		select = FabricaSelecao.fabricaSelecao(new Onde[] { agua }, null,
				new ColunaSelecao(new Coluna("int", "fogo")),
				new FiltroSQlBasico("agua", "3", ">"));
		
		select.setOutrasConfiguracoes("OFF SET(3)");
		Assert.assertEquals(
				"SELECT * FROM Agua WHERE agua > 3 ORDER BY(fogo) OFF SET(3)",
				select.codigoSQL());
	}

}
